前言
首先要有一个概念,即 渲染管线 和 Shader 是对应的,同一个 Shader 放到不同的渲染管线里可能就会出现问题。
一般情况下我们使用的渲染管线都是 Unity 默认的渲染管线,使用的 Shader 默认也 Unity 提供相对应的默认 Shader,这里我们要继续使用 Unity 默认渲染管线,就最好在原有默认 Shader 的基础上进行修改,这样的话之前 默认Shader 的功能也不会丢失,也不容易出问题。
即对应不同种类 GameObject 的默认 Shader 相当于我们写 Shader 的模板,在初期很多东西都不了解的情况下,我们需要修改的东西很少很少,而 .cginc文件 相当于一个公共的库,使用 .cginc 可以把重复的部分单独抽出来,这样之后再写会节省很多时间,一些通用的图形学公式也可以放到 .cginc,使用的时候直接调用就可以了。
获取 Unity 内置 Shader
首先是下载对应的 Unity 默认 Shader,我使用的是18.4.3f1,是长期支持的版本之一。
使用类似 VS Code 的文本工作环境打开整个文件夹,找到 UI-Deafult,默认情况下我们新建 UI/Image就是使用的这个Shader。
集合到 .cginc
这里我们新建一个 UIDefault.cginc 文件,用于保存默认的 UI-Default 模板,基本就是把 默认的 UI Shader 复制了过来。下面是一些解释,大家可以先略过,等想看的时候回头再来看。
- #include 了 .cginc,是为了后续调用对应的方法或者值,可以进到这两个文件中查看,在上一步下载到的目录中可以找到具体代码。
- #pragma 是定义宏,在编译的时候可以选择合适的代码编译
- 两个 struct 直接 copy 过来,对应使用。
- 接下来是 UI 通用的一些属性
- 把 vert 和 frag 更改了名字,并在 frag 中修改了直接去颜色的方法,改成自定义的 ProcessColor,这样的话可以在外部进行自定义该方法,实现不同的效果。
1 | #include "UnityCG.cginc" |
具体使用
具体使用会讲解一个案例来使用,blur 效果。